package com.yc.cloud.admin.service;

import com.yc.cloud.common.orm.CommonPage;
import com.yc.cloud.common.basic.dto.BasePageReqDTO;
import com.yc.cloud.admin.dto.request.HwCameraSnapshotStrategyCreateReqDTO;
import com.yc.cloud.admin.dto.request.HwCameraSnapshotStrategyUpdateReqDTO;
import com.yc.cloud.admin.dto.request.StrategyTimeslotBindReqDTO;
import com.yc.cloud.admin.dto.request.StrategyTimeslotUnbindReqDTO;
import com.yc.cloud.admin.vo.HwCameraSnapshotStrategyVo;
import com.yc.cloud.entity.HwCameraSnapshotStrategy;
import com.baomidou.mybatisplus.extension.service.IService;

import java.time.LocalDate;
import java.util.List;

/**
 * <p>
 * 摄像头抓图策略表 服务类
 * </p>
 *
 * @author kinggu
 * @since 2025-10-10
 */
public interface HwCameraSnapshotStrategyService extends IService<HwCameraSnapshotStrategy> {

    // ==================== 基础CRUD方法 ====================
    
    /**
     * 创建摄像头抓图策略表
     * @param createReqDTO 创建参数
     * @return 创建成功后的VO对象
     */
    HwCameraSnapshotStrategyVo create(HwCameraSnapshotStrategyCreateReqDTO createReqDTO);

    /**
     * 更新摄像头抓图策略表
     * @param updateReqDTO 更新参数
     * @return 更新成功后的VO对象
     */
    HwCameraSnapshotStrategyVo update(HwCameraSnapshotStrategyUpdateReqDTO updateReqDTO);

    /**
     * 分页查询策略列表
     */
    CommonPage<HwCameraSnapshotStrategyVo> list(BasePageReqDTO pageReqDTO);

    /**
     * 根据ID获取VO
     */
    HwCameraSnapshotStrategyVo getVOById(Long id);

    /**
     * 实体列表转VO列表
     */
    List<HwCameraSnapshotStrategyVo> convertToVoList(List<HwCameraSnapshotStrategy> entityList);

    /**
     * 根据ID获取实体
     */
    HwCameraSnapshotStrategy get(Long id);

    /**
     * 删除策略
     */
    boolean delete(Long id);
    
    // ==================== 扩展业务方法 ====================
    
    /**
     * 设置为全局默认策略
     * 
     * @param strategyId 策略ID
     * @return 是否设置成功
     */
    boolean setGlobalDefault(Long strategyId);
    
    /**
     * 为摄像头绑定抓图策略
     *
     * @param cameraId 摄像头ID
     * @param strategyId 策略ID
     * @param effectiveDate 生效日期（可选）
     * @param expiryDate 失效日期（可选）
     * @return 是否绑定成功
     */
    boolean bindCameraStrategy(Long cameraId, Long strategyId, 
                               LocalDate effectiveDate, 
                               LocalDate expiryDate);
    
    /**
     * 解除摄像头的抓图策略绑定
     *
     * @param cameraId 摄像头ID
     * @return 是否解绑成功
     */
    boolean unbindCameraStrategy(Long cameraId);
    
    /**
     * 获取策略绑定的摄像头列表
     *
     * @param strategyId 策略ID
     * @return 摄像头ID列表
     */
    List<Long> getBindCameraIds(Long strategyId);
    
    /**
     * 启用策略
     *
     * @param strategyId 策略ID
     * @return 是否成功
     */
    boolean enableStrategy(Long strategyId);
    
    /**
     * 禁用策略
     *
     * @param strategyId 策略ID
     * @return 是否成功
     */
    boolean disableStrategy(Long strategyId);
    
    /**
     * 策略绑定时间段
     * @param bindReqDTO 绑定请求参数
     * @return 是否绑定成功
     */
    boolean bindTimeslots(StrategyTimeslotBindReqDTO bindReqDTO);

    /**
     * 解绑策略时间段（支持批量）
     * @param unbindReqDTO 解绑请求参数
     * @return 是否解绑成功
     */
    boolean unbindTimeslots(StrategyTimeslotUnbindReqDTO unbindReqDTO);
    
    /**
     * 获取策略绑定的时间段列表
     * @param strategyId 策略ID
     * @return 时间段VO列表
     */
    List<com.yc.cloud.admin.vo.HwCameraTimeSlotVo> getTimeslotsByStrategyId(Long strategyId);
} 